package com.shrct.businessprocess.project;

import com.shrct.businessprocess.organization.RCEmployee;
import com.shrct.businessprocess.project.RCSaleCommissionTotalSettlement;
import com.shrct.businessprocess.project.RCSalesAssignmentStatus;
import com.shrct.businessprocess.project.RCSalesCommissionYearConfig;
import com.shrct.businessprocess.project.impl.RCSalesAssignmentImpl;
import com.shrct.businessprocess.project.proxy.RCSalesAssignmentProxy;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import edu.fudan.mylang.pf.INamedModelObject;
import java.util.Collection;
import java.util.Date;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = RCSalesAssignmentImpl.class)
public interface RCSalesAssignment extends IModelObject, INamedModelObject {
  public abstract RCEmployee getSaler();
  
  public abstract RCSalesAssignment setSaler(final RCEmployee saler);
  
  public abstract Date getStartDate();
  
  public abstract RCSalesAssignment setStartDate(final Date startDate);
  
  public abstract Date getLeaveDate();
  
  public abstract RCSalesAssignment setLeaveDate(final Date leaveDate);
  
  public abstract Collection<RCSalesCommissionYearConfig> getCommissionConfigs();
  
  public abstract Collection<RCSaleCommissionTotalSettlement> getCommissions();
  
  public abstract String getEntityName();
  
  public abstract void update(final Procedure1<? super RCSalesAssignment> updater);
  
  public abstract void checkValid();
  
  public abstract RCSalesAssignmentStatus getStatus();
  
  public abstract void start();
  
  public abstract void leave(final Date leaveDate);
  
  public abstract Boolean isOnJob();
  
  public abstract Boolean isLeaveJob();
  
  public abstract RCSalesAssignmentProxy toProxy();
}
